package org.huangrui.spark.java.core.req;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;

/**
 * @Author hr
 * @Create 2024-10-20 7:40
 */
public class UserAvgAge {
    public static void main(String[] args) {
        final SparkConf conf = new SparkConf().setMaster("local[*]").setAppName("spark");
        final JavaSparkContext jsc = new JavaSparkContext(conf);
        JavaRDD<String> rdd = jsc.textFile("data/user.txt");

        // TODO 获取年龄的平均值
        //      RDD功能和方法，数据源的数据，格式不是我们的学习重点。所以解析数据非常的繁琐。
        //      所在在特殊的场景中，Spark对数据处理的逻辑进行了封装，简化开发。
        //      SparkSQL其实就是对Spark RDD的封装
        // line => 30
        // line => 40
        // line => 50
        // final List<Integer> ages = Arrays.asList(30, 40, 50);
        JavaRDD<Integer> mapRdd = rdd.map(line -> {
            int age = 0;
            String[] split = line.trim().substring(1, line.length() - 1).split("\\,");
            for (String kv : split) {
                String[] ss = kv.trim().split(":");
                if ("\"age\"".equals(ss[0])) {
                    age = Integer.parseInt(ss[1]);
                    break;
                }
            }
            return age;
        });


        long avg = mapRdd.reduce(Integer::sum) / mapRdd.count();
        System.out.println("avg = " + avg);

        jsc.close();
    }
}
